// 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。
// 找出 nums 中的三个整数，使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

// 测试通过
var threeSumClosest = function(nums, target) {
    let sub = Number.MAX_VALUE; //取到可能出现数的最大值
    let sum0;
    for (let i = 0; i < nums.length - 2; i++) {
        for (let j = i + 1; j < nums.length - 1; j++) {
            for (let k = j + 1; k < nums.length; k++) {
                let sum = nums[i] + nums[j] + nums[k];
                if (sub > Math.abs(sum - target)) {
                    sub = Math.abs(sum - target);
                    sum0 = sum;
                }
            }
        }
    }
    return sum0;
};

// 双指针解法
var threeSumClosest = function(nums, target) {
    nums.sort((a, b) => a - b) // 排序
    let ans = nums[0] + nums[1] + nums[2] // 三数之和 数组下标肯定>=3
    for (let i = 0; i < nums.length; i++) {
        // 双指针 写法还是三数之和的思想写法
        let left = i + 1
        let right = nums.length - 1
        while (left < right) {
            let tempNum = nums[i] + nums[left] + nums[right]
                // 判断条件
            if (Math.abs(target - tempNum) < Math.abs(target - ans)) {
                ans = tempNum
            }
            if (tempNum > target) {
                right--
            } else if (tempNum < target) {
                left++
            } else {
                // 相等情况
                return tempNum
            }
        }
    }
    return ans
};